package com.cloud.common.util;

import javax.imageio.ImageIO;
import javax.imageio.stream.ImageOutputStream;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.net.URL;

/**
 * @Description 图片处理
 */
public class GraphicsUtil {

    public static InputStream merge(BufferedImage blank, BufferedImage top, int offsetX, int offsetY, int width, int height) {
        try {
            top = resize(width, height, top);
            Graphics g = blank.getGraphics();
            g.drawImage(top, blank.getWidth() - top.getWidth() - offsetX, offsetY, null);
            g.dispose();

            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            ImageOutputStream imageOutput = ImageIO.createImageOutputStream(byteArrayOutputStream);
            ImageIO.write(blank, "png", imageOutput);
            InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
            return inputStream;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }


    /**
     * @Description 对图片进行缩放
     * @Param [targetWidth：缩放后的宽度, targetHeight：缩放后的高度, image：图片]
     */
    public static BufferedImage resize(int targetWidth, int targetHeight, BufferedImage image) {
        double scaleW = (double) targetWidth / (double) image.getWidth();
        double scaleH = (double) targetHeight / (double) image.getHeight();

        double scale = scaleW < scaleH ? scaleW : scaleH;

        BufferedImage result = new BufferedImage((int) (image.getWidth() * scale), (int) (image.getHeight() * scale), BufferedImage.TYPE_INT_ARGB);

        Graphics2D g2d = result.createGraphics();
        g2d.drawImage(image, 0, 0, result.getWidth(), result.getHeight(), null);
        g2d.dispose();

        return result;
    }


    public void saveBit(InputStream inStream) throws IOException {

        ByteArrayOutputStream outStream = new ByteArrayOutputStream();
//创建一个Buffer字符串
        byte[] buffer = new byte[1024];
//每次读取的字符串长度，如果为-1，代表全部读取完毕
        int len = 0;
//使用一个输入流从buffer里把数据读取出来
        while ((len = inStream.read(buffer)) != -1) {
//用输出流往buffer里写入数据，中间参数代表从哪个位置开始读，len代表读取的长度
            outStream.write(buffer, 0, len);
        }
//关闭输入流
        inStream.close();
//把outStream里的数据写入内存

//得到图片的二进制数据，以二进制封装得到数据，具有通用性
        byte[] data = outStream.toByteArray();
//new一个文件对象用来保存图片，默认保存当前工程根目录
        File imageFile = new File("E:\\pro\\blog\\temp\\40.png");
//创建输出流
        FileOutputStream fileOutStream = new FileOutputStream(imageFile);
//写入数据
        fileOutStream.write(data);
        fileOutStream.close();

    }

}